#ifndef MONITOR_NEW_CORE_MONITOR_MANAGER_H_
#define MONITOR_NEW_CORE_MONITOR_MANAGER_H_

#include <memory>
#include <vector>

// 添加必要的包含
#include "build/proto_src/config.pb.h"
#include "build/proto_src/system_info.pb.h"
#include "config/config_manager.h"
#include "executor/system_tool_executor.h"
#include "executor/system_file_executor.h"
#include "core/monitor_queue.h"

namespace sysinfo {
namespace monitor {

class MonitorManager {
 public:
  MonitorManager();
  ~MonitorManager();

  // 初始化监控管理器
  bool Init(const std::string& config_file_path);

  // 启动所有监控组件
  void Start();

  // 停止所有监控组件
  void Stop();
  
  // 执行一次性监控任务
  void StartOnce();
  
  // 获取队列大小批次的结果
  std::vector<SystemInfoProto> FetchResultBatchByQueueSize();
  
  // 从循环队列获取队列大小批次的结果
  std::vector<SystemInfoProto> FetchResultBatchByQueueSizeFromCircular();
  
  // 获取单个结果
  SystemInfoProto FetchResult();
  
  // 获取指定数量的结果
  std::vector<SystemInfoProto> FetchResultBatch(size_t batch_size);
  
  // 从循环队列获取指定数量的结果
  std::vector<SystemInfoProto> FetchResultBatchFromCircular(size_t batch_size);
  
  // 获取队列当前大小
  size_t GetMainQueueSize() const;
  size_t GetCircularQueueSize() const;

 private:
  std::unique_ptr<ConfigManager> config_manager_;
  std::unique_ptr<SystemToolExecutor> system_tool_executor_;
  std::unique_ptr<SystemFileExecutor> system_file_executor_;
  
  // 明确区分有界队列和循环队列，与老项目保持一致
  std::shared_ptr<BoundedMonitorQueue<SystemInfoProto>> system_info_queue_;
  std::shared_ptr<CircularMonitorQueue<SystemInfoProto>> system_info_circular_queue_;
  
  ConfigProto config_;
};

}  // namespace monitor
}  // namespace sysinfo

#endif  // MONITOR_NEW_CORE_MONITOR_MANAGER_H_